package com.neusoft.nepm.service.impl;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.neusoft.nepm.mapper.SupervisorMapper;
import com.neusoft.nepm.vo.ResponseData;
import com.neusoft.nepm.po.Supervisor;
import com.neusoft.nepm.service.ISupervisorService;
import com.neusoft.nepm.utils.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zouran
 * createDate：2023/6/19  9:42
 * 公众监督员Service实现类
 */
@Service
public class SupervisorServiceImpl implements ISupervisorService {

    @Resource
    private SupervisorMapper mapper;
    @Resource
    private StringUtils stringUtils;
    /**
     * 根据手机号和密码获取公众监督员信息
     * 登录操作
     * @param supervisor
     * @return
     */
    @Override
    public ResponseData<Object> getSupervisorByIdByPass(Supervisor supervisor) {
        ResponseData<Object> data = new ResponseData<>();
        //校验信息
        if(supervisor==null){
            //数据异常
            data.setCode(1001);
            data.setMessage("参数异常");
            return  data;
        }
        //supervisor!=null
        //验证手机==null 或者 手机号格式不正确
        if(stringUtils.isEmpty(supervisor.getTelId())||!stringUtils.isRealPhone(supervisor.getTelId())){
            //数据异常
            data.setCode(1001);
            data.setMessage("手机号格式不正确");
            return  data;
        }
        //密码为空 或者 密码格式不正确
        if(stringUtils.isEmpty(supervisor.getPassword())|| !stringUtils.isRealPassword(supervisor.getPassword())){
            System.out.println(supervisor.getPassword());
            data.setCode(1001);
            data.setMessage("密码格式不正确");
            return  data;
        }
        //数据库查询
        Supervisor supervisorData = mapper.getSupervisorByIdByPass(supervisor);
        if(supervisorData==null){
            data.setCode(2001);
            data.setMessage("手机号或密码不正确");
            return  data;
        }
        //返回正确数据
        data.setCode(200);
        data.setMessage("success");
        StpUtil.login(supervisor.getTelId());
        SaTokenInfo saTokenInfo=StpUtil.getTokenInfo();
        Map<String,String> map=new HashMap<>();
        map.put("telId", supervisor.getTelId());
        System.out.println(saTokenInfo);
        map.put("token",saTokenInfo.tokenValue);
        data.setResult(map);
//        data.setResult(supervisorData);
        return data;
    }

    /*
      验证手机号码是否存在
      */
    @Override
    public  ResponseData getSupervisorById(String telId){
        ResponseData data = new ResponseData<>();
        //校验信息
        if(telId==null){
            //数据异常
            data.setCode(1001);
            data.setMessage("参数异常");
            return  data;
        }
        //supervisor!=null
        //验证手机==null 或者 手机号格式不正确
        if(stringUtils.isEmpty(telId)||!stringUtils.isRealPhone(telId)){
            //数据异常
            data.setCode(1001);
            data.setMessage("手机号格式不正确");
            return  data;
        }
        Supervisor supervisor = mapper.selectById(telId);
        if(supervisor!=null){
            data.setCode(2001);
            data.setMessage("手机号已被注册");
            return  data;
        }
        data.setCode(200);
        data.setMessage("手机号未注册");
        return  data;
    }

    //公众监督员：注册功能
    @Override
    @Transactional
    public ResponseData saveSupervisor(Supervisor supervisor){
        //服务端验证数据有效性
        ResponseData  data = new ResponseData<>();
        if(supervisor==null){
            //数据异常
            data.setCode(1001);
            data.setMessage("参数异常");
            return  data;
        }
        //可以验证手机号和密码
        //supervisor!=null
        //验证手机==null 或者 手机号格式不正确
        if(stringUtils.isEmpty(supervisor.getTelId())||!stringUtils.isRealPhone(supervisor.getTelId())){
            //数据异常
            data.setCode(1001);
            data.setMessage("手机号格式不正确");
            return  data;
        }
        //密码为空 或者 密码格式不正确
        if(stringUtils.isEmpty(supervisor.getPassword())|| !stringUtils.isRealPassword(supervisor.getPassword())){
            data.setCode(1001);
            data.setMessage("密码格式不正确");
            return  data;
        }
        int i = mapper.insert(supervisor);
        if (i==0){
            data.setCode(2001);
            data.setMessage("数据写入失败");
            return  data;
        }
        data.setCode(200);
        data.setMessage("用户新增成功");
        return  data;
    }
}
